Önemli Notlar

  • Yanında Değiştirmeyin ibaresi bulunan hiçbir kodu ve/veya satırı değiştirmeyin.
  • Yazılardakı ve kodlardaki açıklamaları dikkatlice okuyun.
  • Kodların sırasını mümkün olduğunca değiştirmeyin. Aksi taktirde hata ile karşılaşabilirsiniz.
  • Paketler bölümünde, gerekli R paketlerini bu belgede kodu verilmiş Load.Install fonksiyonunu kullanarak indirin ve yükleyin.
  • Seed bölümünde, istediğiniz sayıyı kullanabilirsiniz. Rassal olarak seçilen değerler, eğer varsa, seçtiğiniz sayıya göre değişecektir.
  • R hakkında daha fazla bilgi için, benim yazdığım R mini BootCamp adlı İngilizce kaynaktan faydalanabilirsiniz.

1 Hazırlık

1.1 Paketler

  • R paketlerini Load.Install fonksiyonunu kullanarak indirin ve/veya yükleyin.
# Gerekli paketlerin yüklenmesi.
Load.Install(c("rstudioapi", "readxl", "plyr", "dplyr", "tidyr", "stringr", "stringi", "Hmisc", "reshape2", "scales", "ggplot2", "xtable", "latex2exp", "forecast", "WDI", "fpp2", "fpp3", "datasets", "quantmod", "ggseas", "slider"))

1.2 Seed

  • Aşağıdaki R kodu bölümünde istediğiniz sayıyı girebilirsiniz.
set.seed(1234)

2 Veri Yükleme

  • Bu bölümde zaman serileri verisinin farklı kaynaklardan yüklenmesi gösterilecektir.

2.1 World Bank Verisi

  • World Bank’ten direkt olarak WDI R paketini kullanarak veri indirip yüklemeye çalışalım.
  • World Bank’ten veri indirip yüklemek için temel olarak 2 fonksiyonu kullanacağız: WDIsearch ve WDI.
    • WDIsearch fonksiyonu ile indirip yüklemek istediğimiz veriyi belirleyebiliriz.
    • WDI fonksiyonu ile belirlediğimiz veriyi indirip yükleyebiliriz.
  • Örnek olması açısından “Türkiye için Nominal Gayri Safi Yurtiçi Hasıla” verisini TL cinsinden indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*current.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.CN" GDP (current LCU) datasını kullanacağız.
#>      indicator          
#> [1,] "NV.SRV.DISC.CN"   
#> [2,] "NY.GDP.DISC.CN"   
#> [3,] "NY.GDP.MKTP.CN"   
#> [4,] "NY.GDP.MKTP.CN.AD"
#> [5,] "NY.GDP.PCAP.CN"   
#> [6,] "NYGDPMKTPSACN"    
#>      name                                                      
#> [1,] "Discrepancy in GDP, value added (current LCU)"           
#> [2,] "Discrepancy in expenditure estimate of GDP (current LCU)"
#> [3,] "GDP (current LCU)"                                       
#> [4,] "GDP: linked series (current LCU)"                        
#> [5,] "GDP per capita (current LCU)"                            
#> [6,] "GDP,current LCU,millions,seas. adj.,"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.CN"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[, c("year", "NY.GDP.MKTP.CN")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "GDP") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "GDP")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "GDP"
variable.name <- "Nominal GSYH (TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.2 R Paketleri Verisi

  • Bazı R paketlerinde mevcut olan veriyi direkt olarak yüklemeye çalışalım.
  • R paketlerinde mevcut olan veriyi yüklemek için 1 fonksiyon kullanacağız: data.
    • data fonksiyonu ile istediğimiz veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından fpp2 R paketinden “Avustralya Elektrik Uretimi (milyar kWh)” verisini yükleyelim.
    • fpp2 R paketinden yüklemek istediğimiz verinin ismi qauselec’tir.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
data(qauselec) ## Datayı yüklüyoruz.
data <- qauselec ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
head(data, 20) ## Datanın yapısını inceleyelim.
#>       Qtr1  Qtr2  Qtr3  Qtr4
#> 1956 3.923 4.436 4.806 4.418
#> 1957 4.339 4.811 5.259 4.735
#> 1958 4.608 5.196 5.609 4.977
#> 1959 4.883 5.744 6.035 5.514
#> 1960 5.387 6.211 6.659 5.983
data <- data.frame(Date = as.Date(time(data)), Elec.Prod = as.matrix(data), stringsAsFactors = FALSE) ## Yüklediğimiz data time series formatında olduğu için bu datayı data.frame formatına çeviriyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Elec.Prod"
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.3 Excel Verisi

  • Excel dosyasından direkt olarak veri yüklemeye çalışalım.
  • Excel dosyasından veri yüklemek için 1 fonksiyon kullanacağız: read_excel.
    • read_excel fonksiyonu ile veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “İstanbul’a Verilen Temiz Su Miktarları” verisini yükleyelim.
  • Daha sonra yüklediği bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
file.path <- "clean-water.xlsx" ## Data dosyasının ismi ve uzantısı.

# Ham data yüklenmesi
data <- read_excel(path = file.path, sheet = 3, range = cell_limits(c(1, 1), c(NA, NA)), col_names = TRUE, col_types = "text") ## Yüklediğimiz datayı tibble formatında kaydediyoruz.
data <- as.data.frame(data, stringsAsFactors = FALSE) ## Datayı data.frame formatına çeviriyoruz.
data ## Datanın yapısını inceleyelim.
colnames(data)[1] <- "Month" ## İlk sütun ismini değiştiriyoruz.
data$Month <- 1:12 ## İlk sütundaki hücrelere ay ismi yerine rakam veriyoruz.

# Datanın dönüştürülmesi.
data <- reshape2::melt(data, id.vars = c("Month"), variable_name = "value")

# Bazı değişiklikler.
data <- dplyr::rename(data, Year = variable)
data <- dplyr::rename(data, Clean.Water = value)
data$Year <- as.numeric(as.character(data$Year))
data$Clean.Water <- as.numeric(data$Clean.Water)
data$Date <- as.Date(paste(data$Year, data$Month, "1", sep = "-")) ## Date adlı tarihi belirten yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "Month", "Clean.Water")] ## İstediğimiz değişkenleri belirtiyoruz.
data <- data[data$Year != 2019, ] ## 2019 datasının son gözleminde bir problem olduğu için 2019 yılını siliyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Clean.Water"
variable.name <- "İstanbul'a Verilen Temiz Su Miktarı (Ton)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Ay)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.4 CSV Verisi

  • CSV dosyasından den direkt olarak veri yüklemeye çalışalım.
  • CSV dosyasından veri yüklemek için 1 fonksiyon kullanacağız: read_excel.
    • read.csv fonksiyonu ile veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “İstanbul Barajlarinin Doluluk Oranları” verisini yükleyelim.
  • Daha sonra yüklediği bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
file.path <- "dam_occupancy.csv" ## Data dosyasının ismi ve uzantısı.

# Ham data yüklenmesi
data <- read.csv(file = file.path, header = TRUE, sep = ",", dec = ".", colClasses = "character", comment.char = "", na.string = "") ## Datanın yüklenmesi.
data ## Datanın yapısını inceleyelim.
colnames(data) <- c("Date", "Occupancy.Rate", "Reserved.Water") ## Sütun isimlerinin değiştirilmesi.
data$Occupancy.Rate <- as.numeric(data$Occupancy.Rate) ## Numerik kategori olarak değiştirildi.
data$Reserved.Water <- as.numeric(data$Reserved.Water) ## Numerik kategori olarak değiştirildi.
data$Date <- as.Date(data$Date, tz = "UTC", format = "%Y-%m-%d") ## Date kategori olarak değiştirildi.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Occupancy.Rate"
variable.name <- "İstanbul Barajları Doluluk Oranı"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.5 Yahoo Finance Verisi

  • Yahoo Finance’ten direkt olarak quantmod R paketini kullanarak veri indirip yüklemeye çalışalım.
  • Yahoo Finance’ten veri indirip yüklemek için 1 fonksiyon kullanacağız: loadSymbols.
    • loadSymbols fonksiyonu ile istediğimiz veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “Google Hisse Senedi Fiyatı” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
loadSymbols(Symbols = "GOOG", periodicity = "daily", return.class = "data.frame") ## Yahoo Finance uzerinden buldugumuz sembolu (GOOG) kullanarak ve datanın frekansını seçerek datayı indirip yükleyebiliriz. İndirdiğimiz datanın ismi sembol ismi ile aynı olacaktır.
#> 'getSymbols' currently uses auto.assign=TRUE by default, but will
#> use auto.assign=FALSE in 0.5-0. You will still be able to use
#> 'loadSymbols' to automatically load data. getOption("getSymbols.env")
#> and getOption("getSymbols.auto.assign") will still be checked for
#> alternate defaults.
#> 
#> This message is shown once per session and may be disabled by setting 
#> options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
#> [1] "GOOG"
GOOG ## Datanın yapısını inceleyelim.

data <- data.frame(Date = rownames(GOOG), Google = GOOG$GOOG.Close, stringsAsFactors = FALSE) ## Kapanış fiyatları seçiliyor ve sütun ismi olarak Google veriliyor.
data$Date <- as.Date(data$Date) ## Date kategori olarak değiştiriliyor.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Google"
variable.name <- "Google Hisse Senedi Fiyatı"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(latex2exp::TeX(variable.name)) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3 Verinin Hazırlanması

  • Bu bölümde zaman serileri verisinin hazırlanması için uygulanabilecek teknikler farklı kaynaklardan veriler kullanılarak gösterilecektir.

3.1 Enflasyon Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Nominal Gayri Safi Yurtiçi Hasıla” verisini TL cinsinden ve “Türkiye için Gayri Safi Yurtiçi Hasıla Deflatörü (2009 Baz Yılı)” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş verinin enflasyon ayarlamasını yapalım.
  • Son olarak enflasyon ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*current.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.CN" GDP (current LCU) datasını kullanacağız.
#>      indicator          
#> [1,] "NV.SRV.DISC.CN"   
#> [2,] "NY.GDP.DISC.CN"   
#> [3,] "NY.GDP.MKTP.CN"   
#> [4,] "NY.GDP.MKTP.CN.AD"
#> [5,] "NY.GDP.PCAP.CN"   
#> [6,] "NYGDPMKTPSACN"    
#>      name                                                      
#> [1,] "Discrepancy in GDP, value added (current LCU)"           
#> [2,] "Discrepancy in expenditure estimate of GDP (current LCU)"
#> [3,] "GDP (current LCU)"                                       
#> [4,] "GDP: linked series (current LCU)"                        
#> [5,] "GDP per capita (current LCU)"                            
#> [6,] "GDP,current LCU,millions,seas. adj.,"
WDIsearch(string = "gdp.*deflator", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.DEFL.ZS" GDP deflator (base year varies by country) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>       indicator             
#>  [1,] "NY.GDP.DEFL.87.ZG"   
#>  [2,] "NY.GDP.DEFL.KD.ZG"   
#>  [3,] "NY.GDP.DEFL.KD.ZG.AD"
#>  [4,] "NY.GDP.DEFL.ZS"      
#>  [5,] "NY.GDP.DEFL.ZS.87"   
#>  [6,] "NY.GDP.DEFL.ZS.AD"   
#>  [7,] "NY.GDP.MKTP.CD.XD"   
#>  [8,] "NY.GDP.MKTP.CN.XD"   
#>  [9,] "NY.GDP.MKTP.IN"      
#> [10,] "NY.GDP.MKTP.XD"      
#> [11,] "NY.GDP.MKTP.XU.E"    
#>       name                                                       
#>  [1,] "Inflation, GDP deflator (annual %)"                       
#>  [2,] "Inflation, GDP deflator (annual %)"                       
#>  [3,] "Inflation, GDP deflator: linked series (annual %)"        
#>  [4,] "GDP deflator (base year varies by country)"               
#>  [5,] "GDP deflator (1987 = 100)"                                
#>  [6,] "GDP deflator: linked series (base year varies by country)"
#>  [7,] "GDP deflator, index (2000=100; US$ series)"               
#>  [8,] "GDP deflator, period average (LCU index 2000=100)"        
#>  [9,] "GDP Deflator"                                             
#> [10,] "GDP deflator (1987=100,Index)"                            
#> [11,] "GDP deflator, end period (base year varies by country)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.CN", "NY.GDP.DEFL.ZS"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[, c("year", "NY.GDP.MKTP.CN", "NY.GDP.DEFL.ZS")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "GDP", "GDP.Deflator") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "GDP", "GDP.Deflator")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Enflasyon ayarlaması.
data[data$GDP.Deflator == 100, "Year"] ## Datanin baz yılı belirleniyor. 2009 yılı.
#> [1] 2009
data$R.GDP <- (data$GDP / data$GDP.Deflator) * 100 ## Enflasyon ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP"
variable.name <- "Real GSYH (2009 TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.2 Nüfus Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Reel Gayri Safi Yurtiçi Hasıla (2009 Baz Yılı)” verisini TL cinsinden ve “Türkiye için Nüfus” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş verinin nüfus ayarlamasını yapalım.
  • Son olarak nüfus ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*constant.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.KN" GDP (constant LCU) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>      indicator          
#> [1,] "NV.SRV.DISC.KN"   
#> [2,] "NY.GDP.DISC.KN"   
#> [3,] "NY.GDP.FCST.KN.87"
#> [4,] "NY.GDP.MKTP.KN"   
#> [5,] "NY.GDP.MKTP.KN.87"
#> [6,] "NY.GDP.PCAP.KN"   
#> [7,] "NYGDPMKTPSAKN"    
#>      name                                                       
#> [1,] "Discrepancy in GDP, value added (constant LCU)"           
#> [2,] "Discrepancy in expenditure estimate of GDP (constant LCU)"
#> [3,] "GDP at factor cost (constant 1987 LCU)"                   
#> [4,] "GDP (constant LCU)"                                       
#> [5,] "GDP at market prices (constant 1987 LCU)"                 
#> [6,] "GDP per capita (constant LCU)"                            
#> [7,] "GDP,constant 2010 LCU,millions,seas. adj.,"
WDIsearch(string = "SP.POP.TOTL", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "SP.POP.TOTL" Total Population datasını kullanacağız.
#>      indicator            name                                              
#> [1,] "SP.POP.TOTL.ICP"    "SP.POP.TOTL.ICP:Population"                      
#> [2,] "SP.POP.TOTL.ICP.ZS" "SP.POP.TOTL.ICP.ZS:Population shares (World=100)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.KN", "SP.POP.TOTL"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.MKTP.KN", "SP.POP.TOTL")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP", "Population") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP", "Population")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Nüfus ayarlaması.
data$R.GDP.PCAP <- data$R.GDP / data$Population ## Nüfus ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP.PCAP"
variable.name <- "Kişi Başı Reel GSYH (2009 TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.3 Kur Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Kişi Başı Reel Gayri Safi Yurtiçi Hasıla (2009 Baz Yılı)” verisini TL cinsinden ve “TL/USD Döviz Kuru” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş verinin kur ayarlamasını (Amerikan dolarına çevirelim) yapıp USD cinsinden hesaplayalım.
  • Son olarak kur ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*capita.*constant.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.PCAP.KN" GDP per capita (constant LCU) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>                       indicator                            name 
#>                "NY.GDP.PCAP.KN" "GDP per capita (constant LCU)"
WDIsearch(string = "exchange.*rate.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "PA.NUS.FCRF" Official exchange rate (LCU per US$, end period) datasını kullanacağız.
#>      indicator    
#> [1,] "DPANUSLCU"  
#> [2,] "DPANUSSPB"  
#> [3,] "DPANUSSPF"  
#> [4,] "PA.NUS"     
#> [5,] "PA.NUS.FCRF"
#> [6,] "PE.NUS.FCAE"
#>      name                                                              
#> [1,] "Official exchange rate, LCU per USD, period average"             
#> [2,] "Exchange rate, new LCU per USD extended backward, period average"
#> [3,] "Exchange rate, old LCU per USD extended forward, period average" 
#> [4,] "Exchange rate (LCU per US$, period average)"                     
#> [5,] "Official exchange rate (LCU per US$, period average)"            
#> [6,] "Official exchange rate (LCU per US$, end period)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.PCAP.KN", "PA.NUS.FCRF"), start = 2000, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.PCAP.KN", "PA.NUS.FCRF")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP.PCAP", "Exchange.Rate") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP.PCAP", "Exchange.Rate")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Nüfus ayarlaması.
data$R.GDP.PCAP.USD <- data$R.GDP.PCAP / data$Exchange.Rate ## Nüfus ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP.PCAP.USD"
variable.name <- "Kişi Başı Reel GSYH (2009 USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.4 Büyüme Oranı

  • Örnek olması açısından World Bank’ten “Türkiye için Kişi Başı Reel Gayri Safi Yurtiçi Hasıla (2009 Baz Yılı)” verisini USD cinsinden indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden büyüme oranı hesaplayalım.
  • Son olarak büyüme oranı hesaplanmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*capita.*constant", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.PCAP.KD" GDP per capita (constant 2010 US$) datasını kullanacağız. 2010 baz yılı kullanılıyor.
#>      indicator             
#> [1,] "6.0.GDPpc_constant"  
#> [2,] "NY.GDP.PCAP.KD"      
#> [3,] "NY.GDP.PCAP.KN"      
#> [4,] "NY.GDP.PCAP.PP.KD"   
#> [5,] "NY.GDP.PCAP.PP.KD.87"
#>      name                                                  
#> [1,] "GDP per capita, PPP (constant 2011 international $) "
#> [2,] "GDP per capita (constant 2010 US$)"                  
#> [3,] "GDP per capita (constant LCU)"                       
#> [4,] "GDP per capita, PPP (constant 2017 international $)" 
#> [5,] "GDP per capita, PPP (constant 1987 international $)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.PCAP.KD"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.PCAP.KD")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP.PCAP") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP.PCAP")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Büyüme oranı hesaplaniyor.
temp <- data ## Aşağıdaki dögünün işlemesi için datayı farklı bir isimle kaydedip onunla işlem yapıyoruz.
for (i in 3:ncol(temp)) {
    x <- temp[ , i]
    growth.x <- 100 * (diff(x, lag = 1, differences = 1) / x[-length(x)])
    growth.x <- round(growth.x, 3)
    x <- as.data.frame(c(NA, growth.x), stringsAsFactors = FALSE)
    colnames(x) <- paste0("Gr.", colnames(temp)[i]) ## Büyüme değerlerini "Gr." ile ifade ediyoruz.
    temp <- cbind(temp, x)
}
data <- temp ## Tekrar aynı ismi kullanmaya başlıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Gr.R.GDP.PCAP"
variable.name <- "Kişi Başı Reel GSYH Büyüme Oranı (USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")
#> Warning: Removed 1 row(s) containing missing values (geom_path).
#> Warning: Removed 1 rows containing missing values (geom_point).


3.5 İndeks Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Tüketici Fiyatları İndeksi (2010 Baz Yılı)” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden yeni bir baz yılı belirleyelim.
  • Son olarak yeni baz yılı ile hesaplanmış veriyi grafiğe dökelim.
WDIsearch(string = "consumer.*price.*index", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "FP.CPI.TOTL" Consumer price index (2010 = 100) datasını kullanacağız. 2010 baz yılı kullanılıyor.
#>      indicator             name                                         
#> [1,] "2.01.03.01.prcpbase" "Consumer price index base year"             
#> [2,] "EP.CPI.1996"         "Consumer Price Index in 42 cities base 1996"
#> [3,] "EP.CPI.2002"         "Consumer Price Index in 45 cities base 2002"
#> [4,] "EP.CPI.2007"         "Consumer Price Index in 66 cities base 2007"
#> [5,] "EP.CPI.2012"         "Consumer Price Index in 82 cities base 2012"
#> [6,] "FP.CPI.TOTL"         "Consumer price index (2010 = 100)"          
#> [7,] "GFDD.OE.01"          "Consumer price index (2010=100, December)"  
#> [8,] "GFDD.OE.02"          "Consumer price index (2010=100, average)"
data <- WDI(country = c("TR"), indicator = "FP.CPI.TOTL", start = 1960, end = 2019, extra = FALSE)  ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "FP.CPI.TOTL")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "CPI.2010") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "CPI.2010")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Yeni bir baz yılına göre (2019 Baz Yılı) indeksi tekrar hesaplıyoruz.
data$CPI.2019 <- (data$CPI.2010/data[data$Year == 2019, "CPI.2010"]) * 100
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "CPI.2019"
variable.name <- "Tüketici Fiyatları İndeksi (2019 Baz Yılı)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.6 Matematiksel Transformasyon

  • Örnek olması açısından Yahoo Finance’ten “Döviz Kuru (TL/USD)” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinde logaritmik ve Box-Cox transformasyonu uygulayalım.
  • Son olarak düzey formundaki, logaritmik formdaki ve Box-Cox transformasyonu ile değiştirilmiş veriyi grafiğe dökelim.
loadSymbols(Symbols = "TRY=X", periodicity = "daily", return.class = "data.frame") ## Datanın indirilmesi.
#> Warning: TRY=X contains missing values. Some functions will not work if objects
#> contain missing values in the middle of the series. Consider using na.omit(),
#> na.approx(), na.fill(), etc to remove or replace them.
#> [1] "TRY=X"
data <- data.frame(Date = rownames(`TRY=X`), Close = `TRY=X`$`TRY=X.Close`, stringsAsFactors = FALSE) ## Datanın data.frame olarak kaydedilmesi.
data$Date <- as.Date(data$Date) ## Date kategori olarak değiştirildi.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Logaritmik transformasyon.
data$Ln.Close <- log(data$Close)

# Box-Cox transformasyonu.
value <- data$Close
## Box-cox transformasyonu ile bulunan lambda değerine göre ham veri değiştiriliyor: Eğer lambda = 1 ise transformasyona gerek yok, eğer lambda == 0 ise ln(x), ve eğer lambda farklı bir değer ise (x^lambda - 1)/lambda.
s.lambda <- forecast::BoxCox.lambda(value, method = c("loglik"), lower = -2, upper = 2) ## Box-cox transformasyonu sonucunda bulunan lambda değeri. method = c("guerrero") kriteri de kullanılabilir. Genelde kullanılan alt limit -2 ve üst limit ise 2'dir.
if(s.lambda == 1) { ## Lambda = 1.
    value.boxcox <- value
    message("Box-Cox transformasyonu sonucu: Transformasyona gerek yok.")
} else if(s.lambda == 0) { ## Lambda = 0.
    value.boxcox <- log(value)
    message("Box-Cox transformasyonu sonucu: Logaritmik Transformasyon yapıldı.")
} else { ## Lambda farklı bir değer ise.
    value.boxcox <- (value^s.lambda - 1)/s.lambda
    message(paste0("Box-Cox transformasyonu sonucu: λ = ", round(s.lambda, 2), " kullanılarak Box-Cox transformasyonu yapıldı."))
}
#> Box-Cox transformasyonu sonucu: λ = -0.7 kullanılarak Box-Cox transformasyonu yapıldı.
data$Box.Cox.Close <- value.boxcox
data ## Datanın yapısını inceleyelim.

# Düzey Formu: Grafik
temp <- data
variable <- "Close"
variable.name <- "Döviz Kuru (TL/USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# Logaritmik Form: Grafik
temp <- data
variable <- "Ln.Close"
y.lab <- "Ln Döviz Kuru (TL/USD)"
variable.name <- "Logaritmik Transformasyon ile Döviz Kuru (TL/USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(y.lab) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# Box-Cox Transformasyonu: Grafik
temp <- data
variable <- "Box.Cox.Close"
y.lab <- paste0("Box-Cox $(\\lambda = ", round(s.lambda, 2), ")$ ile Döviz Kuru (TL/USD)")
variable.name <- paste0("Box-Cox Transformasyonu ile Döviz Kuru (TL/USD)")

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(latex2exp::TeX(y.lab)) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")